package com.jt.controller;

import com.jt.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

@Controller
@ResponseBody //返回值统一的JSON串
public class UserController {
    @RequestMapping("/hello")
    public String hello(){
        return "您好,SpringMVC";
    }
    @RequestMapping("/say")
    public String say(){
        return "元旦快乐";
    }

    /**
     * 知识点:
     *       1.springmvc为了简化取值过程 可以直接添加参数,源码如下
     *       2.SpringMVC中,请求的路径地址不能重复的!
     *       3.如果遇到多个参数,则可以使用对象的方式接收 对象的属性必须添加get/set方法.
     *        SpringMVC如果发现参数名称与对象的属性名称一致时,则自动调用set方法完成赋值.
     *
     */
    @RequestMapping("/findUserById")
    public String findUserById(int id){
        System.out.println("获取用户的ID值:"+id);
        return "查询成功";
    }
//    @RequestMapping("/findUserById")
//    public String findUserById(HttpServletRequest request){
//        //spring 整合servlet 之后的源码
//        String id = request.getParameter("id");
//        int intid = Integer.valueOf(id);//String类型先转化为包装类型Integer,然后自动拆箱
//        System.out.println("获取用户的ID值:"+id);
//        return "查询成功";
//    }

    /**
     * 多个参数传递问题
     * 参数:id=1&name=张三&age=18
     * 返回值: String 查询成功
     */
    @RequestMapping("/findUser")
    public String findUser(User user){
        System.out.println(user);
        return "查询成功";
    }

    /**
     * 要求：返回User对象
     *  URL: http://localhost:8080/getUserById?id=100
     * 知识点：对象转化为json时，调用对象的get方法获取属性和属性值
     *       获取getxxx(),之后去除get 然后首字母小写 当做key,
     *       方法的返回值当做value
     */

    @RequestMapping("/getUserById")
    public User getUserById(int id){
        User user = new User();
        user.setId(id);
        user.setName("测试数据");
        user.setSex("男");
        user.setAge(18);
        return user;
    }


    /**
     * SpringMVC动态参数接收 同名提交问题
     *      URL传递：http://localhost:8080/hobby?names=打篮球，踢足球，乒乓球
     *      返回值：返回爱好的list集合
     * 知识点:如果springmvc遇到同名提交参数,并且中间使用逗号分隔
     *       则可以自动转化为数组
     */
    @RequestMapping("/hobby")
    public List<String> hobby(String[] names){
        //数组转化为List集合
        return Arrays.asList(names);
    }

    /**
     * RestFul参数拼接
     * 语法:省略key,将value使用/的方式进行分隔,并且位置固定
     * URL地址:http://localhost:8080/user/tomcat/18/男
     *
     * RestFul接收数据
     *  RestFul参数接收语法:
     *                  1.参数使用{}进行包裹,并且指定属性名称
     *                  2.使用注解@PathVariable进行参数接收
     *                  3.restFul要求请求的路径不能出现动词
     * 优化:如果restFul的属性名称与对象的属性名一致,则可以利用对象接收 ,一定要有get,set方法
     * 减少前端与后端交互字节量
     */
//    @RequestMapping(value = "/user/{name}/{age}/{sex}",method = RequestMethod.GET)
    @GetMapping("/user/{name}/{age}/{sex}")
     public User getUser(User user){
        return user;
    }
}

//    public User getUser(@PathVariable String name,
//                        @PathVariable int age,
//                        @PathVariable String sex){
//        User user = new User();
//        user.setName(name);
//        user.setAge(age);
//        user.setSex(sex);
//        return user;
//    }
//}
